#pragma warning disable 108
using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using Cephei;
using Cephei.Generic;
using Cephei.QL.Times;
using Cephei.QL.Indexes;
using Cephei.QL.Termstructures;
namespace Cephei.QL.Cashflows
{
     // <summary> 
	// ! The day counter is usually obtained from the inflation term structure that the inflation index uses for forecasting. There is no gearing or spread because these are relevant for YoY coupons but not zero inflation coupons.  \note inflation indices do not contain day counters or calendars.
	// </summary>
    [Guid ("A273156B-3E3C-4827-8323-AD66185962B3"),ComVisible(true)]
	public interface IInflationCoupon : Cephei.QL.Cashflows.ICoupon
	{
		///////////////////////////////////////////////////////////////
        // Methods
        //
        
		 Double AccruedAmount(DateTime d);
        
		 Double Amount {get;}
        
		 Cephei.QL.Times.IDayCounter DayCounter {get;}
        
		 DateTime FixingDate {get;}
        
		 UInt32 FixingDays {get;}
        
		 Cephei.QL.Indexes.IInflationIndex Index {get;}
        
		 Double IndexFixing {get;}
        
		 Cephei.QL.Times.IPeriod ObservationLag {get;}
        
		 Double Price(Cephei.QL.Termstructures.IYieldTermStructure discountingCurve);
        
		 Cephei.QL.Cashflows.IInflationCouponPricer Pricer {get;}
        
		 Double Rate {get;}
        
		 IInflationCoupon SetPricer(Cephei.QL.Cashflows.IInflationCouponPricer pricer);
        
		 IInflationCoupon Update {get;}
    }

    // <summary> 
	// ! The day counter is usually obtained from the inflation term structure that the inflation index uses for forecasting. There is no gearing or spread because these are relevant for YoY coupons but not zero inflation coupons.  \note inflation indices do not contain day counters or calendars. Factory
	// </summary>
   	[ComVisible(true)]
    public interface IInflationCoupon_Factory // : Collection_Factory<IInflationCoupon, ICell<IInflationCoupon>>
    {
        ///////////////////////////////////////////////////////////////
        // Factory methods
        //
    }
}

